Как было упомянуто ранее, одно из достоинств механизма обработки исключений заключается в том, что, поскольку при обработке исключения происходит раскрутка стека вызовов, локальные объекты выходят из области видимости и таким образом помечаются для завершения. Простая иллюстрация этого имеется в программе FinalizeStackUnwind. В этой программе используется рассмотренный ранее класс SimpleLog, в котором реализуется завершение.
//FinalizeStackUnwind.h
using namespace System;
// использование пространства имен Система;
using namespace System::Threading;
// использование пространства имен
// Система::Организация поточной обработки;
public _gc class FinalizeStackUnwind
// класс сборщика мусора FinalizeStackUnwind
SomeMethod выделяет место для локальной переменной-указателя alpha (алфавитный) типа SimpleLog*. Перед нормальным завершением метода, из него вызывается исключение. Механизм раскручивания стека при обработке особых ситуаций видит, что переменная-указатель alpha (алфавитный) больше не доступна, и помечает ее для сборки мусора. Вызов GC: :Collect (СБОРЩИК МУСОРА::Собрать) приводит в действие сборку мусора, и мы видим в выдаче программы, что завершение действительно выполнено.
logfile alpha.txt created
error!!
logfile alpha.txt finalized
logfile alpha.txt disposed
Перевод такой:
системный журнал alpha.txt создан
ошибка!!
системный журнал alpha.txt завершен
системный журнал alpha.txt освобожден